class InitialSchema < ActiveRecord::Migration
  def self.up

    ##################################################################
    # User, based on login engine
    ##################################################################

    create_table :users do |t|
      # t.column :name, :string
      t.column "login", :string, :limit => 80, :default => "", :null => false
      t.column "salted_password", :string, :limit => 40, :default => "", :null => false
      t.column "email", :string, :limit => 60, :default => "", :null => false
      t.column "firstname", :string, :limit => 40
      t.column "lastname", :string, :limit => 40
      t.column "salt", :string, :limit => 40, :default => "", :null => false
      t.column "verified", :integer, :default => 0
      t.column "role", :string, :limit => 40
      t.column "security_token", :string, :limit => 40
      t.column "token_expiry", :datetime
      t.column "created_at", :datetime
      t.column "updated_at", :datetime
      t.column "logged_in_at", :datetime
      t.column "deleted", :integer, :default => 0
      t.column "delete_after", :datetime
    end
    
    ##################################################################
    # question
    ##################################################################

    create_table :questions do |t|
      # t.column :name, :string
      t.column "user_id", :integer, :null => false
      t.column "question", :string, :null => false
      t.column :created_at, :datetime, :null => false
      t.column :rate_plus, :integer, :default=>0
      t.column :rate_minus, :integer, :default=>0
      #t.column rating
      #t.column number of rating
      #t.column flag
      #t.column type ~ question, comment, rant
    end
    add_index :questions, ["user_id"], :name => "fk_question_user"

    ##################################################################
    # answer table
    ##################################################################

    create_table :answers do |t|
      # t.column :name, :string
      t.column :answer, :string, :default => ""
      t.column :created_at, :datetime, :null => false

      t.column :question_id, :integer, :default => 0, :null => false
      t.column :user_id, :integer, :default => 0, :null => false
    end
    add_index :answers, ["user_id"], :name => "fk_answer_user"

    ##################################################################
    # Tag support
    ##################################################################

    create_table :tags do |t|
      t.column :name, :string
    end

    create_table :taggings do |t|
      t.column :tag_id, :integer
      #id of tagged object
      t.column :taggable_id, :integer
      #type of object tagged
      t.column :taggable_type, :string
    end

    ##################################################################
    # rate questions
    ##################################################################

    create_table :user_rate_questions do |t|
      t.column :user_id, :integer, :default => 0, :null => false
      t.column :question_id, :integer, :default => 0, :null => false
      t.column :plussed, :integer, :default => 0, :null => false
    end
    add_index :user_rate_questions, ["user_id"], :name => "fk_urq_user"
    add_index :user_rate_questions, ["question_id"], :name => "fk_urq_question"

    ##################################################################
    # rate answers
    ##################################################################

    create_table :user_rate_answers do |t|
      t.column :user_id, :integer, :default => 0, :null => false
      t.column :answer_id, :integer, :default => 0, :null => false
      t.column :plussed, :integer, :default => 0, :null => false
    end
    add_index :user_rate_answers, ["user_id"], :name => "fk_ura_user"
    add_index :user_rate_answers, ["answer_id"], :name => "fk_ura_answer"

    
  end

  def self.down
    #drop_table :categories
    drop_table :user_rate_answers
    drop_table :user_rate_questions
    drop_table :taggings
    drop_table :tags
    drop_table :answers
    drop_table :questions
    drop_table :users
  end
end
